Rust Project Structure
রাস্ট প্রোজেক্টের ফোল্ডার স্ট্রাকচার কিছু নির্দিষ্ট নিয়ম অনুযায়ী গঠিত থাকে, যাতে কোডটি সংগঠিত এবং রক্ষণাবেক্ষণযোগ্য হয়। রাস্ট প্রকল্প সাধারণত Cargo নামক প্যাকেজ ম্যানেজার ও বিল্ড টুল ব্যবহার করে পরিচালিত হয়, যা প্রোজেক্টের ফোল্ডার স্ট্রাকচারও নির্ধারণ করে।
সাধারণভাবে, একটি রাস্ট প্রোজেক্টের ফোল্ডার স্ট্রাকচার দেখতে এরকম হতে পারে:
project_name/
├── src/
│ ├── main.rs
│ └── lib.rs
├── Cargo.toml
└── target/src/- এই ফোল্ডারে প্রোজেক্টের কোড থাকে। এখানেmain.rsফাইলটি প্রধান কোড শুরু হয় এবংlib.rsফাইলটি সাধারনত লাইব্রেরি কোড ধারণ করে।Cargo.toml- এই ফাইলটি প্রকল্পের প্যাকেজ ম্যানেজমেন্টের জন্য ব্যবহৃত হয় এবং এতে প্রোজেক্টের তথ্য (যেমন নাম, সংস্করণ, ডিপেন্ডেন্সি) থাকে।target/- এই ফোল্ডারটি তৈরি হয় যখন প্রোজেক্টটি কম্পাইল করা হয় এবং এখানে কম্পাইলড আউটপুট থাকে। এটি সাধারণত প্রোজেক্টের ডিস্ট্রিবিউশন ফোল্ডার নয়, তবে সময়ের সাথে এটি বড় হতে পারে।
উদাহরণ: প্রোজেক্ট তৈরি করা
cargo new my_project
cd my_projectএটি একটি নতুন রাস্ট প্রোজেক্ট তৈরি করবে যার src/main.rs ফাইল থাকবে।
Modules in Rust (মডিউলস)
রাস্টে Modules (মডিউলস) কোডের অংশবিশেষকে সংগঠিত করার জন্য ব্যবহৃত হয়। মডিউলস কোডের পুনঃব্যবহারযোগ্য অংশ তৈরি করতে এবং লজিক্যালি কোডকে ভাগ করতে সহায়তা করে।
মডিউলস কীভাবে কাজ করে:
রাস্টে মডিউল হল একটি ফাইল বা ফোল্ডার যা কোডের নির্দিষ্ট অংশ ধারণ করে। যখন একটি নতুন মডিউল তৈরি করতে চান, তখন আপনি সাধারণত একটি নতুন ফাইল তৈরি করেন এবং সেখানে ফাংশন, স্ট্রাকচার, বা অন্য কোড লিখেন।
মডিউল ডিফাইন করা:
মডিউল একটি mod কীওয়ার্ড ব্যবহার করে ডিফাইন করা হয়। এখানে একটি সোজা উদাহরণ:
// main.rs
mod greet; // মডিউল 'greet' অন্তর্ভুক্ত করা হচ্ছে
fn main() {
greet::hello(); // greet মডিউলের hello ফাংশন কল করা হচ্ছে
}// greet.rs
pub fn hello() {
println!("Hello, Rust!");
}mod greet;- এখানেgreetমডিউল অন্তর্ভুক্ত করা হয়েছে, এবং এটি একই নামে একটি ফাইল (greet.rs) থেকে এসেছে।pub- এটি একটি গুরুত্বপূর্ণ কিওয়ার্ড। যদি আপনি একটি মডিউলের ফাংশন বা ভেরিয়েবলকে বাইরের কোড থেকে অ্যাক্সেস করতে চান, তাহলে আপনাকে তাpubদিয়ে প্রকাশ করতে হবে।
ফোল্ডার ভিত্তিক মডিউল (Folder-based Modules)
রাস্টে যদি একটি মডিউল অনেক বড় হয় এবং অনেক ফাংশন বা স্ট্রাকচার থাকে, তবে আপনি তা ফোল্ডার ভিত্তিক মডিউলে ভাগ করতে পারেন। এর মাধ্যমে কোড আরও সংগঠিত এবং রক্ষণাবেক্ষণযোগ্য হয়।
উদাহরণ:
ধরা যাক, আমাদের greet মডিউলের দুটি ফাইল আছে—একটি ফাংশন এবং আরেকটি ভেরিয়েবল ধারণ করতে:
src/
├── main.rs
└── greet/
├── mod.rs
└── hello.rs// main.rs
mod greet; // greet মডিউল অন্তর্ভুক্ত করা হচ্ছে
fn main() {
greet::hello::say_hello(); // greet::hello মডিউলের say_hello ফাংশন কল
}// greet/mod.rs
pub mod hello; // hello.rs মডিউল অন্তর্ভুক্ত করা হচ্ছে// greet/hello.rs
pub fn say_hello() {
println!("Hello from hello.rs!");
}mod.rs- এই ফাইলটি মূল মডিউল হিসেবে কাজ করে, যেখানে অন্যান্য ফাইলের মডিউল গুলি অন্তর্ভুক্ত করা হয়। এটি রুট মডিউল হিসেবে কাজ করে।hello.rs- এই ফাইলটিhelloনামক একটি সাব-মডিউল ধারণ করে।
Private এবং Public মডিউলস
রাস্টে মডিউল এবং তার উপাদানগুলি ডিফল্টভাবে private থাকে, অর্থাৎ এগুলো শুধুমাত্র একই মডিউলের ভিতরে অ্যাক্সেসযোগ্য। তবে, আপনি যদি এগুলো অন্য মডিউল থেকে অ্যাক্সেসযোগ্য করতে চান, তাহলে আপনাকে pub কিওয়ার্ড ব্যবহার করতে হবে।
উদাহরণ:
// main.rs
mod greet;
fn main() {
greet::hello(); // hello() ফাংশন প্রকাশ করা হয়েছে
}// greet.rs
pub fn hello() {
println!("Hello, World!");
}এখানে hello() ফাংশনটি pub হিসেবে ঘোষণা করা হয়েছে, যাতে এটি বাইরের কোড (যেমন main.rs) থেকে অ্যাক্সেস করা যায়।
Super এবং Self
রাস্টে আপনি super এবং self কিওয়ার্ড ব্যবহার করে মডিউল হায়ারার্কি অনুসরণ করতে পারেন।
super- এর মাধ্যমে আপনি বর্তমান মডিউলের উপরের মডিউল অ্যাক্সেস করতে পারেন।self- এর মাধ্যমে আপনি বর্তমান মডিউল বা সাব-মডিউল অ্যাক্সেস করতে পারেন।
উদাহরণ:
// main.rs
mod outer {
pub mod inner {
pub fn hello() {
println!("Hello from inner!");
}
}
pub fn call_inner() {
super::inner::hello(); // super ব্যবহার করে outer থেকে inner কল করা হচ্ছে
}
}
fn main() {
outer::call_inner(); // "Hello from inner!" প্রিন্ট হবে
}সারাংশ
রাস্ট প্রোজেক্ট স্ট্রাকচার এবং মডিউল ব্যবস্থাপনা একটি শক্তিশালী এবং সংগঠিত কোডবেস তৈরি করতে সহায়ক। মডিউলস কোডকে ভাগ করে এবং পুনঃব্যবহারযোগ্য করে তোলে, যা কোডের রক্ষণাবেক্ষণ ও ত্রুটি শনাক্তকরণ সহজ করে দেয়। mod কিওয়ার্ড দিয়ে মডিউল তৈরি ও ব্যবহারের মাধ্যমে রাস্টে বৃহৎ এবং জটিল অ্যাপ্লিকেশন তৈরি করা সম্ভব হয়।
Read more